home *** CD-ROM | disk | FTP | other *** search
/ Delphi Programmer's Power Pack / Delphi Volume 1.iso / e_to_l / flicplay / flicdef.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1996-09-15  |  18.6 KB  |  491 lines

  1. unit FlicDef;
  2.  
  3. interface
  4.  
  5. uses WinTypes, WinProcs, SysUtils, Controls;
  6.  
  7. {
  8.    AAOpen and AAClose are not really needed, except there is
  9.    a bug in Windows which prevents Libraries from being
  10.    freed in the Windows Exit Proc (WEP). So we use AAClose
  11.    to free the Libraries when the last task closes the
  12.    AAPlay DLL.
  13. }
  14.  
  15. function aaOpen: Integer;
  16. procedure aaClose;
  17.  
  18. {
  19.    aaLoad loads an animation:
  20.       WinHandle            =  parent window of created animation
  21.       X, Y, Width, Height  =  size of animation window
  22.       Mode                 =  the loading mode
  23. }
  24.  
  25. function aaLoad(FileName: PChar; WinHandle: HWnd; Mode: Word;
  26.                 X, Y, Width, Height, OrgX, OrgY: Integer): Integer;  { HAnim ? }
  27.  
  28. {
  29.    aaReLoad will load a new animation file into an old animation
  30.    handle. Notifications are lost, but the palette and window are
  31.    retained.
  32. }
  33.  
  34. function aaReLoad(HAnim: HWnd; FileName: PChar; Mode, Mask: Word): Integer; { HAnim ? }
  35.  
  36.  
  37. {
  38.    Valid flags in wMode. The low order eight bits of wMode
  39.    is used in aa_flags.
  40. }
  41.  
  42. const
  43. AA_None = $00;
  44. AA_MEMORYLOAD = $01;       { Load into memory }
  45. AA_HIDEWINDOW = $02;       { Hide the animation window }
  46. AA_NOPALETTE = $04;        { Prevent palette animation }
  47. AA_RESERVEPALETTE = $08;   { Reserve entire palette at start }
  48. AA_LOOPFRAME = $10;        { Loaded with a loop frame }
  49. AA_FULLSCREEN = $20;       { Use full screen for playing }
  50. AA_STOPNOTIFY = $40;       { Prevent any notification messages }
  51. AA_STOPSTATUS = $80;       { Prevent status messages }
  52. AA_NOFAIL = $100;          { Reduce load type on fail }
  53. AA_DONTPAINT = $200;       { Don't paByVal animation when loading }
  54. AA_BUILDSCRIPT = $400;     { FileName is script not name }
  55. AA_ALLMODES = $FF;
  56.  
  57.  
  58. {
  59.    aaUnload unloads a loaded animation. FALSE is returned if
  60.    hAa is not the handle of a loaded animation.
  61. }
  62.  
  63. function aaUnload(HAnim: HWnd): LongBool;
  64.  
  65. {
  66.    aaSound will open or close a sound for the animation
  67.       * The sound is opened if FileName is not nil and not ''.
  68.       * The sound is closed if FileName is nil or ''.
  69.       * If device is null, the appropriate device is AutoDetected by file format.
  70. }
  71.  
  72. function aaSound(HAnim: HWnd; Device, FileName: PChar; Mode: Word): Integer;
  73.  
  74.  
  75. {
  76.    Valid flags for the sound mode.
  77. }
  78.  
  79. const
  80. AA_SNDFREEZE = $01;         { Freeze frames until sound begins }
  81. AA_SNDDEVICEID = $100;      { device is an ID not a name }
  82. AA_SNDBUILDALIAS = $200;    { create sound device alias }
  83.  
  84.  
  85. {
  86.    aaPlay plays a loaded animation. TRUE is returned if the
  87.    animation is not stopped when aaPlay returns.
  88. }
  89.  
  90. function aaPlay(HAnim: HWnd): LongBool;
  91.  
  92. {
  93.    aaNotify allows an application to be notified at specific frames
  94.    when an animation is playing. lPosition is the position at which
  95.    the notification is to take place. The wParam for this message is
  96.    hAa, and the lParam is copied from this call. Returns TRUE if the
  97.    notification is set.
  98. }
  99.  
  100. function aaNotify(HAnim: HWnd; Position: LongInt; lParam: LongInt): LongBool;
  101.  
  102.  
  103. {
  104.    This value for the loops will cause the animation to end when
  105.    the sound has finished. If no sound is playing, the animation
  106.    will loop forever.
  107. }
  108.  
  109. const
  110. AA_LOOPSOUND = $FFFF;
  111.  
  112.  
  113. {
  114.    An automatic notify is sent when an animation in a script is
  115.    reloaded. The lParam of this message is defined below
  116. }
  117.  
  118. AA_ANIMATIONLOADED = $0;
  119.  
  120.  
  121. {
  122.    aaCancel allows an applicatin to cancel notifications set by aaNotify.
  123.    LoPos and HiPos give lower and upper limits on positions. Returns
  124.    the number of notifications canceled.
  125. }
  126.  
  127. function aaCancel(HAnim: HWnd; LoPos, HiPos: LongInt): Integer;
  128.  
  129.  
  130. {
  131.    aaStop will stop a playing animation. TRUE is returned if the
  132.    animation is stopped when aaStop returns.
  133. }
  134.  
  135. function aaStop(HAnim: HWnd): LongBool;
  136.  
  137. {
  138.    aaPause will pause an animation. TRUE is returned if the animation
  139.    is paused when aaPause returns. To resume a paused animation, use
  140.    aaPlay.
  141. }
  142.  
  143. function aaPause(HAnim: HWnd): LongBool;
  144.  
  145. {
  146.    aaPrompt will produce a dialog to prompt for user input. When
  147.  
  148.    input is accepted, the handle is changed to reflect the new
  149.    parameters. The old handle is not destroyed until the new handle
  150.    has been created. aaPrompt returns NULL if the new handle cannot
  151.    be created, otherwise the new handle is returned.
  152. }
  153.  
  154. function aaPrompt(HAnim: HWnd; Name: PChar): HWnd;
  155.  
  156.  
  157. {
  158.    The parameter structure to be used for the animation.
  159. }
  160.  
  161. type
  162.    TAAParms = record
  163.       AA_STATUS,              {  Current status of animation }
  164.       AA_FILETYPE,            {  Type of file on disk }
  165.       AA_MODE,                {  Some flags }
  166.       aa_bitpix: String;      {  bits per pixel }
  167.       AA_WINDOW: HWnd;        {  Handle of window for status messages }
  168.  
  169.       AA_X,                   {  Left of display window }
  170.       AA_Y,                   {  Top of display window }
  171.       AA_CX,                  {  Width of display window }
  172.       AA_CY,                  {  Height of display window }
  173.       AA_ORGX,                {  PoByVal in the animation displayed }
  174.       AA_ORGY,                {  in the upper left corner }
  175.       AA_SPEED,               {  Speed of animation%e msec per frame }
  176.  
  177.       AA_DESIGNSPEED,         {  Designed milliseconds per frame }
  178.       AA_WIDTH,               {  Width of animation in pixels }
  179.  
  180.       AA_HEIGHT,              {  Height of animation in pixels }
  181.       AA_FRAMES,              {  Number of frames in animation }
  182.  
  183.       AA_POSITION,            {  Current frame position }
  184.  
  185.       AA_LOOPS,               {  End of animation position }
  186.       AA_RPTSOUND,            {  Number of times to repeat sound }
  187.       AA_PAUSE,               {  Number of milliseconds to hold last frame }
  188.       AA_DELAYSND: Integer;   {  Delay Sound in milliseconds }
  189.       AA_TRANSIN,             {  Transition at start of animation }
  190.       AA_TRANSOUT: String;    {  Transition at end of animation }
  191.       AA_TIMEIN,              {  Length of transition in, milliseconds }
  192.       AA_TIMEOUT,             {  Length of transition out, milliseconds }
  193.       AA_CALLBACK: Integer;   {  message callback window }
  194.       AA_ANIMWND: HWnd;       {  Animation Window Handle }
  195.    end;
  196.  
  197.  
  198. {
  199.    aaGetParm will return information on an animation. Some of the
  200.    information can be set with aaSetParm, and other information is
  201.    state information maintined by AAPLAY.
  202. }
  203.  
  204. function aaGetParm(HAnim: HWnd; ParmType: Word): LongInt;
  205.  
  206. {
  207.    aaGetParmIndirect returns the same information as aaGetParm, in a
  208.    structure for easy access.
  209. }
  210.  
  211. function aaGetParmIndirect(HAnim: HWnd; var AParams: TAAParms; Size: Integer): LongInt;
  212.  
  213.  
  214. {
  215.    aaSetParm will set information on an animation
  216. }
  217.  
  218. function aaSetParm(HAnim: HWnd; ParmType: Word; HValue: Integer; LValue: LongInt): LongInt;
  219.  
  220. {
  221.    aaSetParmIndirect will set animation parameters from a structure
  222. }
  223.  
  224. function aaSetParmIndirect(HAnim: HWnd; ParmType: LongInt; AParams: TAAParms; Mask: Word): LongInt;
  225.  
  226.  
  227. {
  228.    The parameter types that can be used with aaGetParm, and aaSetParm.
  229. }
  230.  
  231. const
  232. AA_STATUS = 1;                      { Get current status }
  233. AA_FILETYPE = 2;                    { Get Type of animation on disk }
  234. AA_MODE = 3;                        { Get/Set Animation Flags }
  235. AA_WINDOW = 4;                      { Set/Get animation window }
  236. AA_SPEED = 5;                       { Set/Get current speed }
  237. AA_DESIGNSPEED = 6;                 { Get design speed }
  238. AA_FRAMES = 7;                      { Get Number of frames }
  239. AA_POSITION = 8;                    { Set/Get current frame position }
  240. AA_LOOPS = 9;                       { Set/Get number of loops }
  241. AA_X = 10;                          { Set/Get Pos of display window }
  242. AA_Y = 11;                          { Set/Get Pos of display window }
  243. AA_CX = 12;                         { Set/Get extents of display window }
  244. AA_CY = 13;                         { Set/Get extents of display window }
  245. AA_ORGX = 14;                       { Set/Get Origin of display window }
  246. AA_ORGY = 15;                       { Set/Get Origin of display window }
  247. AA_WIDTH = 16;                      { Get Width of animation }
  248. AA_HEIGHT = 17;                     { Get Height of animation }
  249. AA_RPTSOUND = 18;                   { Set/Get sound repeats }
  250. AA_PAUSE = 19;                      { Set/Get pause time }
  251. AA_DELAYSND = 20;                   { Set/Get sound delay time }
  252. AA_TRANSIN = 21;                    { Set/Get Transition In type }
  253. AA_TRANSOUT = 22;                   { Set/Get Transition Out type }
  254. AA_TIMEIN = 23;                     { Set/Get Transition In time }
  255. AA_TIMEOUT = 24;                    { Set/Get Transition Out Time }
  256. AA_CALLBACK = 25;                   { Set/Get CallBack window }
  257. AA_ANIMWND = 26;                    { Get Animation Window Handle }
  258. AA_MODFLAG = 100;                   { Set/Get Script is modified flag }
  259. AA_SCRIPTNAME = 101;                { Set/Get Script name }
  260. AA_ANIMATION = 102;                 { Get/Set Script Animation }
  261. AA_ANIMATIONCOUNT = 103;            { Get Script Animation Count }
  262. AA_SCRIPTCONTENTS = 104;            { Get Script Contents }
  263. AA_LASTERROR = 1001;                { Get last error code }
  264. AA_LASTERRORMESSAGE = 1002;         { Get/Set last error messsage }
  265.  
  266.  
  267. {
  268.    The parameter type that can be used with aaSetParmIndirect
  269. }
  270.  
  271. AA_SETMODE = $01;                 { Get/Set Animation Flags }
  272. AA_SETWINDOW = $02;               { Set/Get animation window }
  273. AA_SETSPEED = $04;                { Set/Get current speed }
  274. AA_SETPOSITION = $08;             { Set/Get current frame position }
  275. AA_SETLOOPS = $10;                { Set/Get number of loops }
  276. AA_SETX = $20;                    { Set/Get left of display window }
  277. AA_SETY = $40;                    { Set/Get left of display window }
  278. AA_SETCX = $80;                   { Set/Get top of display window }
  279. AA_SETCY = $100;                  { Set/Get top of display window }
  280. AA_SETORGX = $200;                { Set/Get width of display window }
  281. AA_SETORGY = $400;                { Set/Get width of display window }
  282. AA_SETRPTSOUND = $800;            { Set/Get sound repeats }
  283. AA_SETPAUSE = $1000;              { Set/Get pause time }
  284. AA_SETDELAYSND = $2000;           { Set/Get sound delay time }
  285. AA_SETTRANSIN = $4000;            { Set/Get Transition In type }
  286. AA_SETTRANSOUT = $8000;           { Set/Get Transition Out type }
  287. AA_SETTIMEIN = $10000;            { Set/Get Transition In time }
  288. AA_SETTIMEOUT = $20000;           { Set/Get Transition Out Time }
  289. AA_SETCALLBACK = $40000;          { Set/Get Callback window }
  290. AA_ALL = $FFFFFFFF;               { Get/Set all parameters }
  291.  
  292.  
  293. {
  294.  
  295.    Status values for an animation
  296. }
  297.  
  298. AA_STOPPED = 1;            { Loaded but not playing }
  299. AA_QUEUED = 2;             { Animation is waiting to play }
  300. AA_PLAYING = 3;            { Animation is playing }
  301. AA_PAUSED = 4;             { Animation is paused }
  302. AA_DONE = 5;               { Animation has ended playing, }
  303.                            { and is awaiting an aaStop call }
  304.  
  305.  
  306. {
  307.  
  308.    File type definitions
  309. }
  310.  
  311. AA_FLI = $01;              { Autodesk Animator Fli format }
  312. AA_DIB = $02;              { Windows DIB format }
  313. AA_NUMTYPES = $02;         { Number of types }
  314. AA_SCRIPT = $03;           { Script without an animation }
  315.  
  316.  
  317. {
  318.    Transition types
  319. }
  320.  
  321. AA_CUT = $00;              { Just stop one and start another }
  322. AA_FADEBLACK = $01;        { Fade In/Out from to black }
  323. AA_FADEWHITE = $02;        { Fade In/Out from to white }
  324.  
  325.  
  326. {
  327.    Error codes returned by aaGetParm(xxx, AA_LASTERROR)
  328. }
  329.  
  330. AA_ERR_NOERROR = $00;               { Unknown error }
  331. AA_ERR_NOMEMORY = $100;             { Out of memory error }
  332.  
  333. AA_ERR_BADHANDLE = $101;            { Bad handle }
  334. AA_ERR_NOTIMERS = $102;             { Cannot start timer }
  335. AA_ERR_BADSOUND = $103;             { Bad sound spec }
  336. AA_ERR_NOSCRIPT = $104;             { Requires a script }
  337. AA_ERR_WRITEERR = $105;             { Write error for script }
  338. AA_ERR_BADANIMATION = $106;         { Can not opem animation }
  339. AA_ERR_BADWINDOWHANDLE = $200;      { Bad Window Handle }
  340.  
  341. AA_ERR_WINDOWCREATE = $201;         { Cannot create window }
  342. AA_ERR_DLGERROR = $202;             { Dialog error }
  343. AA_ERR_INVALIDSTATUS = $300;        { Invalid status }
  344.  
  345. AA_ERR_BADDIBFORMAT = $301;         { Bad dib file }
  346. AA_ERR_BADFLIFORMAT = $302;         { Bad fli file }
  347. AA_ERR_UNRECOGNIZEDFORMAT = $303;   { Unrecognized format }
  348. AA_ERR_NOSOUND = $304;              { Sound not supported }
  349. AA_ERR_NOTVALIDFORSCRIPTS = $305;   { Not valid for scripts }
  350. AA_ERR_INVALIDFILE = $306;          { Bad file handle }
  351. AA_ERR_NOSCRIPTS = $307;            { No Script files }
  352. AA_ERR_SPEED = $400;                { Invalid speed }
  353.  
  354. AA_ERR_LOOPS = $401;                { invalid loops }
  355. AA_ERR_RPTSOUND = $402;             { invalid repeat sound }
  356. AA_ERR_PAUSE = $403;                { invalid pause }
  357. AA_ERR_TRANSIN = $404;              { invalid transition }
  358. AA_ERR_TIMEIN = $405;               { invalid transition }
  359. AA_ERR_TRANSOUT = $406;             { invalid transition time }
  360. AA_ERR_TIMEOUT = $407;              { invalid transition time }
  361. AA_ERR_DELAYSND = $408;             { invalid sound delay }
  362. AA_ERR_INVALIDTYPE = $409;          { invalid parameter type }
  363. AA_ERR_DUPLICATENOTIFY = $500;      { duplicate notify }
  364.  
  365. AA_ERR_NOSWITCH = $600;             { no switch in script }
  366.  
  367. AA_ERR_PARSELOOPS = $601;           { Bad loops in script }
  368. AA_ERR_PARSESPEED = $602;           { Bad speed in script }
  369. AA_ERR_BADRPTSOUND = $603;          { Bad repeat sound in script }
  370. AA_ERR_PARSEPAUSE = $604;           { Bad pause in script }
  371. AA_ERR_PARSETRANS = $605;           { Bad tranisition in script }
  372. AA_ERR_PARSEDELAYSND = $606;        { Bad delay sound in script }
  373. AA_ERR_TOOMANYLINKS = $607;         { Too many links }
  374.  
  375.  
  376. {
  377.    aaShow will show a single frame of an animation in a window.
  378.    The mode determines how the animation is drawn. The window used
  379.    is set using either aaSetParm or aaSetParmIndirect. aaShow returns
  380.    TRUE if the animation was successfully drawn.
  381. }
  382.  
  383. function aaShow(HAnim: HWnd; Show: WordBool): LongBool;
  384.  
  385.  
  386. {
  387.  
  388.    result =aaGetFile(wFlags, lpszPath, wBufLen, lpszDriver, wDrvLen)
  389.  
  390.    Opens a dialog box querying the user for a file in the standard windows
  391.    file open box style.  <dwFlags> determines how the dialog box will appear.
  392.    It may be the following:
  393.  
  394.          AA_GETFILE_MUSTEXIST    Selected file must satisfy conditions of
  395.                                  OpenFile() flags, else dialog beeps.
  396.          AA_GETFILE_NOSHOWSPEC   DO NOT show the search spec in the edit box.
  397.                                  Default IS to show the spec.
  398.          AA_GETFILE_SAVE         Ok button will show "Save".
  399.          AA_GETFILE_OPEN         Ok button will show "Open".
  400.          AA_GETFILE_USEFILE      Set the filename to the file in lpszPath
  401.          AA_GETFILE_UDEDIR       Change to the directory in lpszPath
  402.          AA_GETFILE_SOUND        Get sound file and driver
  403.          AA_GETFILE_SCRIPT       Get script file
  404.          AA_GETFILE_ANIMATION    Get Animation File (no scripts)
  405.  
  406.    <lpszPath> is a LPSTR to a string buffer into which the final fully
  407.    qualified pathname will be written.  <wBufLen> is the length of this
  408.    buffer.
  409.  
  410.    <lpszDriver> is a LPSTR to a string buffer into which a sound device
  411.    selection is placed. <wDrvLen> is the length of this buffer.
  412.  
  413.    Return value is:       0 = if cancel was hit
  414.                          -1 = if OpenFile() failed but AA_GETFILE_MUSTEXIST was not specified.
  415.                          .. = DOS file handle of selected file, otherwise. This handle is not
  416.                               open when aaOpenFile returns.
  417. }
  418.  
  419. function aaGetFile(Flags: LongInt; Path: PChar; BufLen: Integer;
  420.  
  421.                    Driver: PChar; DrvLen: Integer): Integer;
  422.  
  423.  
  424. {
  425.  
  426.    flags:
  427.       can be any of the following
  428. }
  429.  
  430. const
  431. AA_GETFILE_MUSTEXIST = $01;
  432. AA_GETFILE_NOSHOWSPEC = $02;
  433. AA_GETFILE_SAVE = $04;
  434. AA_GETFILE_OPEN = $08;
  435. AA_GETFILE_USEDIR = $10;
  436. AA_GETFILE_USEFILE = $20;
  437. AA_GETFILE_SOUND = $40;
  438. AA_GETFILE_SCRIPT = $80;
  439. AA_GETFILE_ANIMATION = $100;
  440.  
  441.  
  442. {
  443.    Save a script
  444. }
  445.  
  446. function aaSave(HAnim: HWnd; Mode: Word): Integer;
  447.  
  448.  
  449. {
  450.    wMode Values
  451. }
  452.  
  453. const
  454. AA_SAVE_IFMODIFIED = 1;
  455. AA_SAVE_AS = 2;
  456. AA_SAVE_CANCEL = 4;
  457.  
  458.  
  459. {
  460.    Get Capabitities
  461. }
  462.  
  463. function aaGetCaps(ParmType: Word): Integer;
  464.  
  465.  
  466. {
  467.    Capabitlities
  468. }
  469.  
  470. const
  471. AA_CAP_TIMER = 1;
  472. AA_CAP_SOUND = 2;
  473. AA_CAP_SCRIPT = 3;
  474.  
  475.  
  476. {
  477.    Animation status messages
  478.    Use RegisterWindowMessage to get the real message
  479.    numbers.
  480. }
  481.  
  482. AA_NOTIFY = 'AAPLAY Notify';        { notification message }
  483. AA_STOP = 'AAPLAY Stop';            { stop message }
  484.  
  485.  
  486. {
  487.    These are sent in the low word of lParam with the AA_ERROR
  488.    message. They indicate the error that occured
  489. }
  490.  
  491. AA_BADPLAY = 1;             { Error attempting to play }
  492. AA_BADNOTIFY = 2;           { Error attempting to notify }
  493. AA_BADSCRIPT = 3;           { Error attempting to animation in script }
  494.  
  495. implementation
  496.  
  497. function aaOpen: Integer; external 'AAPlay.DLL' index 7;
  498. procedure aaClose; external 'AAPlay.DLL' index 8;
  499.  
  500. function aaLoad(FileName: PChar; WinHandle: HWnd; Mode: Word;
  501.                 X, Y, Width, Height, OrgX, OrgY: Integer): Integer; external 'AAPlay.DLL' index 9;
  502. function aaReLoad(HAnim: HWnd; FileName: PChar; Mode, Mask: Word): Integer; external 'AAPlay.DLL' index  23;
  503. function aaUnload(HAnim: HWnd): LongBool; external 'AAPlay.DLL' index 10;
  504.  
  505. function aaSound(HAnim: HWnd; Device, FileName: PChar; Mode: Word): Integer; external 'AAPlay.DLL' index 22;
  506. function aaPlay(HAnim: HWnd): LongBool; external 'AAPlay.DLL' index 12;
  507. function aaNotify(HAnim: HWnd; Position: LongInt; lParam: LongInt): LongBool; external 'AAPlay.DLL' index 20;
  508.  
  509. function aaCancel(HAnim: HWnd; LoPos, HiPos: LongInt): Integer; external 'AAPlay.DLL' index 21;
  510. function aaStop(HAnim: HWnd): LongBool; external 'AAPlay.DLL' index 13;
  511. function aaPause(HAnim: HWnd): LongBool; external 'AAPlay.DLL' index 18;
  512. function aaPrompt(HAnim: HWnd; Name: PChar): HWnd; external 'AAPlay.DLL' index 11;
  513.  
  514. function aaGetParm(HAnim: HWnd; ParmType: Word): LongInt; external 'AAPlay.DLL' index 14;
  515. function aaGetParmIndirect(HAnim: HWnd; var AParams: TAAParms; Size: Integer): LongInt; external 'AAPlay.DLL' index 15;
  516. function aaSetParm(HAnim: HWnd; ParmType: Word; HValue: Integer; LValue: LongInt): LongInt; external 'AAPlay.DLL' index 16;
  517. function aaSetParmIndirect(HAnim: HWnd; ParmType: LongInt; AParams: TAAParms; Mask: Word): LongInt;
  518.                            external 'AAPlay.DLL' index 17;
  519.  
  520. function aaShow(HAnim: HWnd; Show: WordBool): LongBool; external 'AAPlay.DLL' index 19;
  521. function aaGetFile(Flags: LongInt; Path: PChar; BufLen: Integer;
  522.                    Driver: PChar; DrvLen: Integer): Integer; external 'AAPlay.DLL' index 24;
  523.  
  524. function aaSave(HAnim: HWnd; Mode: Word): Integer; external 'AAPlay.DLL' index 25;
  525. function aaGetCaps(ParmType: Word): Integer; external 'AAPlay.DLL' index 26;
  526.  
  527. procedure AAExitProc; far;
  528. begin
  529.    aaClose;
  530. end;
  531.  
  532. begin
  533.    AddExitProc(AAExitProc);
  534. end.
  535.